package org.jeecg.modules.syncdata.service;

import cn.hutool.core.date.DateTime;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.jeffreyning.mybatisplus.service.IMppService;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.syncdata.dto.SyncDataDto;
import org.jeecg.modules.syncdata.vo.SyncResultVo;
import org.jeecg.modules.thirdpartyapi.constant.BgApiEnum;

import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;

/**
 * 同步服务
 *
 * @author zhanglei01
 * @date 2022/03/16
 */
public interface SyncService {

    /**
     * 调用第三方api
     *
     * @param apiName api名称
     * @param dto     dto
     * @return {@link IPage}<{@link Map}<{@link String}, {@link Object}>>
     */
    IPage<Map<String, Object>> callThirdPartyApi(String apiName, Object dto);

    /**
     * 调用第三方api
     *
     * @param apiName api名称
     * @param dto     dto
     * @return {@link Result}
     */
    Result callThirdPartyApiUnUpGzip(String apiName, Object dto);

    /**
     * 更新数据表
     *
     * @param list       列表
     * @param mppService mpp服务
     * @param bgApiEnum  bg api枚举
     * @return {@link Boolean}
     */
    Boolean updateDataByList(List list, IMppService mppService, BgApiEnum bgApiEnum);

    /**
     * 同步单表
     *
     * @param executor    遗嘱执行人
     * @param bgApiEnum   bg api枚举
     * @param syncDataDto 同步数据dto
     * @param dayTime     一天的时间
     */
    void syncSingleTable(ExecutorService executor, BgApiEnum bgApiEnum, SyncDataDto syncDataDto, String dayTime);

    /**
     * 同步单表
     *
     * @param executor  遗嘱执行人
     * @param bgApiEnum bg api枚举
     * @param dayTime   一天的时间
     * @return {@link SyncResultVo}
     */
    SyncResultVo syncSingleTable(ExecutorService executor, BgApiEnum bgApiEnum, DateTime dayTime);
}
